Some outstanding bug fixes found in VT merge
- Consistence of region id mangling algrithm:
- Metaphysical RID is not mangled, which may conflict with other
domain's virtual RID
- Sometimes rr0 is mangled, but sometimes not
- Sometimes only rid value is saved to saved_rr0_metaphysical, but
sometimes the whole value.
- Nat bit comsumption happens but handled as priv_emulate to forward progress.
But this is definitely wrong. We found reason of nat consumption from fast_rfi,
which doesn't save unat again after spill guest states, and then use guest
unat to fill guest states when return.
- In some corner case, timer interrupt handler won't update itm and then return
directly. When that happens, machine timer interrupt disappears until guest
timer interrupt sets v_itm actively. But vti domain depends on ac_timer while
the latter will stop when above condition happens. Then if current context is
vti domain, context switch disappears and machine halt.
Also many compatibility issues to support non-vti and vti domain are solved,eg:
- Changing lazy PAL mapping switch to eager switch per domain switch, since
vti domain always depends on pal call.
- evtchn_notify should also vcpu_wake target domain, since vti domain may block for io emulation. Xenolinux is free of this issue, since it's always runnable.
Signed-off-by Kevin Tian <kevin.tian@intel.com>
Signed-off-by Anthony Xu <anthony.xu@intel.com>
29 files changed: